home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / UTILITIE / CPU_MEMO / 0978.ZIP / OFFER_#1.TXT < prev    next >
Text File  |  1987-07-15  |  19KB  |  393 lines

  1.  
  2.                                                                   July 87
  3.  
  4.             GETTING DOS TO OPEN 256 FILES SIMULTANEOUSLY!!
  5.       TSR Programs, Source Code, Tutorial, Commentary and More...
  6.                                   by
  7.                              Steve Gibson
  8.  
  9.                               -*- -*- -*-
  10.  
  11.  
  12.  
  13.            This file is divided into the following sections:
  14.           ---------------------------------------------------
  15.                  o  WHAT'S ON THE DISK
  16.                  o  USING THE NEW "FILES" COMMAND
  17.                  o  A BRIEF HISTORY OF THIS OFFER DISK
  18.                  o  HOW THE PROGRAMS WORK
  19.                  o  THE WRAP UP
  20.           ---------------------------------------------------
  21.  
  22.  
  23.  
  24.                           WHAT'S ON THE DISK
  25. ----------------------------------------------------------------------
  26. o  FILES.TXT - This file (the one you're reading now) describes the 
  27.    contents of this "Steve's TSR Offer #1" diskette, and outlines the 
  28.    use and operation of the included files and programs. 
  29.  
  30.  
  31. o  TSR.TXT - This file is a complete tutorial introduction to the 
  32.    technology and operation of Terminate and Stay Resident (TSR) 
  33.    programs under MS/PC-DOS.  It was rewritten from Steve's original 
  34.    four-part InfoWorld TECHTALK column series on TSR Technology.
  35.  
  36.  
  37. o  Three SUB-DIRECTORIES:  FILES33, FILES3X, and OPENER.
  38.    Each sub-directory contains the collection of files pertaining to 
  39.    the COM file bearing the sub-directory's name.  See the details 
  40.    which follow below:
  41.  
  42.    o  FILES33 is for use with DOS 3.3.  It was the first of these 
  43.       programs to be written.  It "plays by the rules" by using only 
  44.       fully documented techniques (well almost).  It also uses and 
  45.       demonstrates the new handle requesting mechanism in DOS 3.3. 
  46.  
  47.    o  FILES3X is for use with all DOS 3.x versions EXCEPT the latest 
  48.       3.3.  It uses a collection of undocumented (but well known) 
  49.       techniques to achieve the same effect as the DOS 3.3 handle 
  50.       count request mechanism.  As such it allows users of DOS 
  51.       versions 3.00 thru 3.20 to have the same 256 file limit as 
  52.       FILES33.COM gives to DOS 3.30 users. 
  53.  
  54.    o  OPENER is a test program which easily and quickly demonstrates 
  55.       the working of the other programs.  It rapidly creates and opens 
  56.       files whose names take the form !AAAA, !AAAB, !AAAC, !AAAD, etc.  
  57.       It continues in this fashion, alphabetically advancing the file 
  58.       names until the file creation request fails.  While doing this, 
  59.       it counts the number of open files and displays their names and 
  60.       handle IDs. 
  61.  
  62.  
  63. o  RAM.COM - A "quickie" DOS command which displays the amount of RAM 
  64.    currently available to a DOS application program.  It is useful if 
  65.    given before and after loading any resident TSR program (like the 
  66.    FILES command) to see how much memory that program consumes.
  67.    It can ALSO be used IMMEDIATELY after booting DOS with various 
  68.    settings of the "FILES=xxx" line in CONFIG.SYS to show how much RAM 
  69.    is always being consumed by DOS's static file management buffers. 
  70.  
  71.  
  72. To assist assembly language programmers who haven't yet conquered the 
  73. mysteries of resident software programming, for those who wonder what 
  74. assembly language programs look like, and to completely document the 
  75. programs, this disk also includes heavily commented source code which 
  76. takes a mild tutorial approach.  Additionally, BATCH files are 
  77. included which can be used to drive the creation of COM files from the 
  78. included assembly language sources. 
  79.  
  80. As mentioned above, the three subdirectories on the diskette (FILES33, 
  81. FILES3X, and OPENER) contain the files relating to each COM program. 
  82.  
  83. ---------------------------- PLEASE NOTE: ----------------------------
  84. You should ONLY use ONE of the two FILES programs (FILES3X or FILES33) 
  85. depending upon the version of DOS you're currently running.
  86. ----------------------------------------------------------------------
  87.  
  88.  
  89.                            -*- -*- -*-
  90.  
  91.  
  92.  
  93.                      USING THE NEW "FILES" COMMAND
  94. ----------------------------------------------------------------------
  95. The following are step-by-step instructions are for those who want to 
  96. "get on with it" and perhaps read the rest of this OFFER_#1 file 
  97. later.  The balance of this document contains a brief history of the 
  98. programs and a complete functional and operational description of this 
  99. package.  If you follow the instructions below you need NOT bother 
  100. reading further.
  101.  
  102.  
  103.                           FILES INSTRUCTIONS
  104. ----------------------------------------------------------------------
  105. 0. If you are NOT using a version 3 of MS-DOS or PC-DOS (DOS 3.00 thru 
  106.    DOS 3.30) you MUST FIRST upgrade yourself.  NONE of the programs on 
  107.    this disk (except OPENER which won't be of much use to you in any 
  108.    case) will run under pre-3.00 DOS versions. 
  109.  
  110.  
  111. 1. COPY either FILES3X.COM or FILES33.COM from the appropriate 
  112.    diskette sub-directory to your main working DOS command directory 
  113.    RENAMING it to FILES.COM in the process.  If you ARE NOT USING DOS 
  114.    version 3.3, copy the FILES3X.COM program.  ONLY IF you ARE USING 
  115.    DOS 3.3, copy the FILES33.COM program.
  116.  
  117.    NOTE: The two programs could have easily been integrated into one, 
  118.    but they were deliberately individualized to allow their individual 
  119.    functionality to be seen more clearly.  This also minimized the 
  120.    programs' resident portions (which is always a good thing). 
  121.  
  122.  
  123. 2. COPY OPENER.COM from the diskette's OPENER sub-directory to your 
  124.    working DOS command directory. 
  125.  
  126.  
  127. 3. EDIT your current CONFIG.SYS file changing the "FILES=xxx" line of 
  128.    that file (or adding one if you don't already have one) to reflect 
  129.    the new total number of files you'd like to be able to have open 
  130.    simultaneously.  Values of up to "FILES=255" are acceptable. 
  131.  
  132.  
  133. 4. REBOOT your computer to activate the new CONFIG.SYS file spec. 
  134.  
  135.  
  136. 5. CREATE a new sub-directory on a diskette or hard disk and make it 
  137.    the current directory.  This will be a place for experimenting with 
  138.    these commands which create and open MANY files.
  139.  
  140.    NOTE: The root directories of most floppy disks is not large enough 
  141.    to hold as many files as you'll now be able to create and open, and 
  142.    you wouldn't want the root directory of your hard disk junked up 
  143.    with temporary files.  So do *EVERYTHING* in this sub-directory!
  144.  
  145.  
  146. 6. NOW, without first running FILES.COM, simply give the command 
  147.    OPENER.  "Opener" will create files whose alphabetically sequential 
  148.    names take the form: !AAAA, !AAAB, !AAAC, etc.  The screen will 
  149.    display the number, name, and DOS handle (which you can ignore if 
  150.    you're not into programming) as each file is created and opened.  
  151.    It will STOP as soon as DOS refuses to Create or Open a file for 
  152.    any reason.
  153.  
  154.    IMPORTANT NOTE: OPENER leaves these zero-length files in your sub-
  155.    directory after it finishes!  This allows you to easily compare the 
  156.    time required for many files to be Created versus Opened.  Users of 
  157.    DOS 3.30 can also measure the benefits of DOS's new FASTOPEN 
  158.    resident utility in this fashion. 
  159.  
  160.    TO DELETE THESE FILES: Give the command "DEL !AA*" which removes 
  161.    all files of the form:  !AAxx  which OPENER creates. 
  162.  
  163.  
  164. 7. NOW, give the command "FILES".  A short message will print to the 
  165.    screen and the DOS prompt will be returned.  BEFORE DOING ANYTHING 
  166.    ELSE, give the OPENER command again.  If everything goes as 
  167.    planned, the number of files you have requested in the FILES= line 
  168.    of CONFIG.SYS will be Created and/or Opened. 
  169.  
  170.    NOTE: A few files FEWER than the number you requested with 
  171.    CONFIG.SYS will probably actually be opened by OPENER owing to the 
  172.    several file handles (for standard console Input and Output) which 
  173.    DOS "pre-opens" for application software. 
  174.  
  175.    ALSO: The statement generated when FILES is installed may be 
  176.    silenced by putting any argument AFTER the FILES command.  So 
  177.    saying something like "FILES Shhhh" will keep FILES quiet.  This 
  178.    may be useful in various BATCH file applications.
  179.  
  180.  
  181.  
  182.  
  183. 8. The included 89-byte "RAM" command displays the amount of main RAM 
  184.    memory available to any application program (such as itself at the 
  185.    time).  This is the same number returned by the DOS CHKDSK command 
  186.    but is much faster.  It can be issued at various times to see 
  187.    what's where.  For example issue the RAM command BEFORE the FILES 
  188.    command and then IMMEDIATELY afterward.  Then subtract the results 
  189.    to see exactly how much memory FILES uses.  Also, giving the RAM 
  190.    command again AFTER running OPENER will show that the original 
  191.    amount of memory available is again available, demonstrating that 
  192.    FILES has successfully removed itself from memory after helping 
  193.    OPENER to open many files.  (I like that spontaneous self removal)
  194.  
  195.  
  196.                          TIPS USING FILES.COM
  197. ----------------------------------------------------------------------
  198. As explained in further detail below, FILES.COM "goes resident" when 
  199. run.  It can then be thought of as "TRIGGERING" the instant ANY 
  200. program either CREATES or OPENS a file.  At the time of this 
  201. triggering, it does things on behalf of whatever program caused the 
  202. trigger, augmenting the maximum file handle count.  It then removes 
  203. itself from RAM and allows the triggering application to proceed. 
  204.  
  205. This behavior implies several things which need to be made clear:
  206.  
  207. 1. The FILES command MUST be given EVERY TIME BEFORE an application 
  208.    program is run which may need simultaneous access to more than 20 
  209.    files.  The effect of "FILES-izing" a program ONLY LASTS until that 
  210.    program terminates. 
  211.  
  212. 2. It is important not to trigger FILES before you want its effect.  
  213.    Many programs which may not appear to be opening a file ... might 
  214.    be ... so it's a good idea not to do ANYTHING between running FILES 
  215.    and running the subject application.
  216.  
  217.                               -*- -*- -*-
  218.  
  219.  
  220.                  A BRIEF HISTORY OF THIS OFFER DISK...
  221. ----------------------------------------------------------------------
  222.  
  223. I didn't know what I was getting into when it all began.....
  224.  
  225. A cover story in the May 18th issue of InfoWorld titled "DOS 3.3 Users 
  226. Report Hard Drive Problems" caught my eye.  At the time, I was just 
  227. finishing up the development of a new, extremely complex and exciting 
  228. hard disk utility (written in 100% assembly code, the source code 
  229. files for it total 340K Bytes!)  so I was attuned to issues relating 
  230. to hard disk problems, and decided to find out what was going on. 
  231.  
  232. I spoke to the various people who were referenced in the story, 
  233. explaining my connection to them as InfoWorld's TECHTALK columnist.  
  234. Aside from satisfying my innate curiosity about this, I thought that 
  235. there might be a "column" in all this as well.  The main issue raised 
  236. in InfoWorld's story was that programs running under DOS 3.3 were 
  237. *NOT* able to have more than 20 files open simultaneously, just as in 
  238. all prior versions of DOS.  This seemed strange because one of the 
  239. often mentioned enhancements to the new DOS 3.3 was supposed to be 
  240. the raising of that limit to "256 files per process". 
  241.  
  242. IBM became involved in the dialogue when the story appeared, and upon 
  243. questioning, indicated that programs needed to be REWRITTEN 
  244. SPECIFICALLY to take advantage of this new feature.  Such programs 
  245. must deliberately request access to more file "handles" using a new 
  246. internal programming function available for the first time in DOS 3.3.  
  247. IBM indicated that all existing DOS programs still aren't able to open 
  248. more than 20 files because they don't know to ask for more handles 
  249. using this new provision.  The new DOS 3.3 Technical Reference Manual 
  250. makes this all very clear as well, indicating that programs requesting 
  251. additional file handles must first free-up some of their own RAM space 
  252. for DOS' use while fulfilling the program's request.  Clearly, real 
  253. preparation and reprogramming is necessary even under this new DOS 3.3 
  254.  
  255. As always, the "FILES=" statement in the CONFIG.SYS file is the UPPER 
  256. LIMIT on the number of files which may be simultaneously open.  If IBM 
  257. had set FILES= to be the default, or had created another CONFIG.SYS 
  258. parameter to set a "per program default" other than 20, then 
  259. everything would have been just fine.
  260.  
  261. But that's not the way it happened.  So I started thinking about 
  262. various ways to solve this problem using TSR resident software 
  263. techniques.  This collection of files is the result of that thinking. 
  264.  
  265.  
  266.                               -*- -*- -*-
  267.  
  268.  
  269.                          HOW THE PROGRAMS WORK
  270. ----------------------------------------------------------------------
  271. Whether we're using "FILES" under DOS 3.3 or an earlier version of DOS 
  272. 3.x, several things are necessary... 
  273.  
  274. Requests must be sent to DOS (requesting more handles) *DURING* the 
  275. time that the application program is running.  This is necessary so 
  276. that DOS will believe that it is the APPLICATION PROGRAM (not us) 
  277. which is issuing those requests.  Also, a block of free RAM has to be 
  278. available to the operating system when these requests are received by 
  279. DOS.  The technologies of resident software easily fulfills these 
  280. requirements. 
  281.  
  282. Application programs always receive ALL of the main memory the system 
  283. has available.  This memory region extends from their loading location 
  284. (the program's load point) up to the end of memory.  (Please see the 
  285. file TSR.TXT included on this diskette for TSR operation details)  We 
  286. grab a block of memory BEFORE the application program begins running, 
  287. then release it just before making the "more handles please" request 
  288. to DOS.  This way we're assured of having at least that amount of 
  289. memory available to DOS when needed. 
  290.  
  291. The whole scheme comes together when we link into DOS' standard 
  292. Interrupt 21h calling sequence.  This allows our program to monitor 
  293. the running application  programs's use of DOS *AFTER* it has begun 
  294. operating.  This monitoring connection allows us to gain control and 
  295. intercede whenever our program decides it's necessary. 
  296.  
  297.                               --- --- ---
  298.  
  299.  
  300. So now let's follow the entire sequence step-by-step... 
  301.  
  302.  
  303. We begin by issuing the FILES command.
  304.  
  305.      ------------------------------------------------------------
  306.       NOTE: Depending upon your current version of DOS, either 
  307.       FILES33.COM or FILES3X.COM should be renamed to FILES.COM.
  308.      ------------------------------------------------------------
  309.  
  310.  
  311. FILES.COM runs, grabbing a small, 256-byte block of RAM memory and 
  312. linking itself into the interrupt 21h chain.  "Linking into the chain" 
  313. means that whenever a subsequent program makes a request of DOS via 
  314. Interrupt 21h, OUR PROGRAM will receive control BEFORE DOS.  Once 
  315. we're linked in and setup, we ask DOS to terminate us with a "TSR" 
  316. call to DOS, which asks DOS to allow us to remain resident in memory. 
  317.  
  318. At this point we're lying dormant in RAM.  We're watching all DOS 
  319. activity via our Interrupt 21h (Int 21) monitoring, but otherwise 
  320. we're asleep.  We're waiting for any program to either CREATE or OPEN 
  321. a file, at which point we spring into action.
  322.  
  323. When the CREATE or OPEN occurs, we temporarily suspend that action.  
  324. Then we release the block of memory which was allocated by the 
  325. transient portion of the TSR program when we were going resident.  DOS 
  326. will find it and use it for maintaining the extended file handles 
  327. table.  Then *WE*, in the guise of the application program, ask DOS to 
  328. extend the file handle count limit.  DOS does not knowing that this 
  329. request is not originating from the application program, so it 
  330. complies.  DOS searches through memory looking for a chunk of free 
  331. RAM, finds our recently freed up block, and uses this memory to hold 
  332. the additional handles we've just requested. 
  333.  
  334. Since we have now finished doing everything we were here for, we free 
  335. up our own allocation of TSR memory, remove ourselves from the 
  336. Interrupt 21h monitoring chain, and exit by passing the application's 
  337. original request through to DOS. 
  338.  
  339.  
  340. ----------------------------------------------------------------------
  341.   For assembly language programmers, the included and highly (overly) 
  342.     commented source code contains the next level of detail on the 
  343.                      operation of these programs.
  344. ----------------------------------------------------------------------
  345.  
  346.  
  347.  
  348.  
  349.                               THE WRAP UP
  350. ----------------------------------------------------------------------
  351.  
  352. o  Well, I can't imagine anything I didn't say.
  353.    (You probably can't either!) 
  354.  
  355. o  I hope you have found this package to be interesting, informative, 
  356.    useful, and perhaps a bit educational. 
  357.  
  358. o  If you're interested in a more general discussion of the operation 
  359.    of resident software, the file TSR.TXT is included here to provide 
  360.    additional TSR background information.  It was rewritten from a 
  361.    four-column series produced for my InfoWorld TECHTALK column.
  362.  
  363. o  If you didn't receive this diskette (or the files) directly from my 
  364.    company, Gibson Research Corp., and you'd like to keep track of our 
  365.    progress, developments, and future offers of this kind please feel 
  366.    free to call with your name and address, or drop us a note or card 
  367.    with it.  We'll be pleased to add you to our general mailing list 
  368.    for all future offers and info.
  369.  
  370.  
  371. Please phone or send your name and address to:
  372. ----------------------------------------------------------------------
  373.                        GIBSON RESEARCH CORPORATION
  374.                                  BOX 6024
  375.                              IRVINE, CA 92716
  376.                               (714) 854-1520
  377. ----------------------------------------------------------------------
  378.  
  379. Finally, thanks for your interest in this package!  Remember, it's in 
  380. the PUBLIC DOMAIN and may be freely distributed, copied, uploaded, 
  381. downloaded, etc. 
  382.  
  383.     PLEASE KEEP THE FILES TOGETHER AND IN THEIR ORIGINAL CONDITION. 
  384.  
  385.  
  386.  
  387. Steve Gibson, President
  388. GIBSON RESEARCH CORP.
  389.  
  390.  
  391.                           <<< END OF FILE >>>
  392.  
  393.